#ifndef PROTO_MESSAGE_H
#define PROTO_MESSAGE_H

#include <google/protobuf/message.h>
#include <string>

namespace cs
{
	template<typename PROTO>
	class proto_message
	{
	public:
		proto_message(std::string msg)
		{
			valid_ = pmsg_.ParseFromString(msg);
		}

		proto_message(): valid_(false) {}

		proto_message(const proto_message& pmsg)
		{
			valid_ = pmsg.valid_;
			pmsg_ = pmsg.pmsg_;
		}

		PROTO* operator -> ()
		{
			return &pmsg_; 
		}

		bool is_valid() const
		{
			return valid_;
		}

		const std::string serialize() const
		{
			std::string str;
			pmsg_.SerializeToString(&str);
			return str;
		}

	private:
		PROTO pmsg_;
		bool valid_;
	};
}

#endif /* PROTO_MESSAGE_H */